package main

import (
	"ay-activity/config"
	"ay-activity/routers"
	"ay-activity/utils"
	"fmt"
	assetfs "github.com/elazarl/go-bindata-assetfs"
	"github.com/gin-gonic/gin"
	"html/template"
	"path/filepath"
	"strings"
	"time"
)

func main() {

	// 创建一个默认的路由引擎
	r := gin.Default()

	// 使用跨域
	r.Use(config.Cors())

	server := config.Config.Server

	SetBindata(r)

	// 使用默认路由
	routers.DefaultRoutersInit(r)
	go func() {
		// 等待服务器启动完成
		time.Sleep(2 * time.Second)
		url := "http://localhost:" + fmt.Sprintf("%d", server.Port)
		fmt.Printf("正在尝试打开浏览器访问: %s\n", url)
		err := utils.OpenBrowser(url)
		if err != nil {
			fmt.Printf("打开浏览器失败: %v\n", err)
			fmt.Printf("请手动在浏览器中访问: %s\n", url)
		} else {
			fmt.Printf("浏览器已成功启动\n")
		}
	}()
	err := r.Run(fmt.Sprintf(":%d", server.Port))
	if err != nil {
		fmt.Printf("失败")
	}
}

// SetBindata 生产环境的实现
func SetBindata(r *gin.Engine) {
	// 使用 go-bindata 提供静态资源
	r.StaticFS("/static", &assetfs.AssetFS{
		Asset:     Asset,
		AssetDir:  AssetDir,
		AssetInfo: AssetInfo,
		Prefix:    "static",
	})

	r.StaticFS("/assets", &assetfs.AssetFS{
		Asset:     Asset,
		AssetDir:  AssetDir,
		AssetInfo: AssetInfo,
		Prefix:    "templates/assets",
	})

	r.StaticFS("/css", &assetfs.AssetFS{
		Asset:     Asset,
		AssetDir:  AssetDir,
		AssetInfo: AssetInfo,
		Prefix:    "templates/css",
	})

	r.StaticFS("/js", &assetfs.AssetFS{
		Asset:     Asset,
		AssetDir:  AssetDir,
		AssetInfo: AssetInfo,
		Prefix:    "templates/js",
	})

	tmpl, err := loadTemplates()
	if err != nil {
		panic(err)
	}
	r.SetHTMLTemplate(tmpl)
}

func loadTemplates() (*template.Template, error) {
	tmpl := template.New("")

	// 获取所有模板文件
	files := AssetNames()
	for _, file := range files {
		if strings.HasPrefix(file, "templates/") && strings.HasSuffix(file, ".html") {
			data, err := Asset(file)
			if err != nil {
				continue
			}

			// 使用文件名作为模板名，确保与控制器中使用的名称一致
			templateName := filepath.Base(file)
			_, err = tmpl.New(templateName).Parse(string(data))
			if err != nil {
				return nil, err
			}
		}
	}

	return tmpl, nil
}
